/* This is a small demo of the high-performance GUIX graphics framework. */

#include <stdio.h>
#include "tx_api.h"
#include "gx_api.h"
#include "gx_validation_utility.h"

TEST_PARAM test_parameter = {
    "guix_all_widgets_root_window_move", /* Test name */
    0, 0, 640, 480   /* Define the coordinates of the capture area.
                         In this test, we only need to capture the line
                         drawing area.  */
};

static VOID      control_thread_entry(ULONG);
int main(int argc, char ** argv)
{
    /* Parse the command line argument. */
    gx_validation_setup(argc, argv);

    /* Start ThreadX system */
    tx_kernel_enter(); 
    return(0);
}

VOID tx_application_define(void *first_unused_memory)
{

    /* Create a dedicated thread to perform various operations
       on the line drawing example. These operations simulate 
       user input. */
    gx_validation_control_thread_create(control_thread_entry);

    /* Termiante the test if it runs for more than 100 ticks */
    /* This function is not implemented yet. */
    gx_validation_watchdog_create(100);

    /* Call the actual line example routine. */
    gx_validation_application_define(first_unused_memory);

}


/* Replace the default graphics driver with the validation driver. */
#ifdef win32_graphics_driver_setup_24xrgb  
#undef win32_graphics_driver_setup_24xrgb  
#endif
#define win32_graphics_driver_setup_24xrgb  gx_validation_graphics_driver_setup_24xrgb


#ifdef WIN32
#undef WIN32
#endif

#include "gx_validation_wrapper.h"
#include "demo_guix_all_widgets.c"

char test_comment[256];
GX_MULTI_LINE_TEXT_VIEW text_view;


static VOID control_thread_entry(ULONG input)
{
int frame_id = 1;
int index;
GX_EVENT my_event;
GX_RECTANGLE winsize;
    gx_widget_detach(&NestedWindow);
    /* Create text view which can pass pen drag event to root window. */
    winsize.gx_rectangle_left = winsize.gx_rectangle_top = 0;
    winsize.gx_rectangle_right = NESTED_WINDOW_WIDTH - 1;
    winsize.gx_rectangle_bottom = NESTED_WINDOW_HEIGHT - 1;
    gx_multi_line_text_view_create(&text_view, "text_view", GX_NULL, 1, GX_STYLE_ENABLED | GX_STATUS_ACCEPTS_FOCUS, 0, &winsize);
    gx_widget_fill_color_set(&text_view, GX_COLOR_ID_BLUE, GX_COLOR_ID_BLUE, GX_COLOR_ID_BLUE);
    gx_widget_attach((GX_WIDGET *)&nested_root, (GX_WIDGET *)&text_view);
    gx_widget_status_add((GX_WIDGET *)&nested_root, GX_STATUS_MOVABLE | (GX_STATUS_ACCEPTS_FOCUS | GX_STATUS_SELECTABLE));

    ToggleScreen(pWindowScreen, pButtonScreen);

    memset(&my_event, 0, sizeof(GX_EVENT));

    my_event.gx_event_type = GX_EVENT_PEN_DOWN;
    my_event.gx_event_payload.gx_event_pointdata.gx_point_x = 100;
    my_event.gx_event_payload.gx_event_pointdata.gx_point_y = 80;
    my_event.gx_event_display_handle = 1;
    gx_system_event_send(&my_event);
    gx_validation_set_frame_id(frame_id++);
    sprintf(test_comment, "pen position x=%d, y=%d", my_event.gx_event_payload.gx_event_pointdata.gx_point_x, my_event.gx_event_payload.gx_event_pointdata.gx_point_y );
    gx_validation_set_frame_comment(test_comment);
    gx_validation_screen_refresh();


    for(index = 0; index < 10 ; index++ )
    {
        /* Inform the validation system 
        (1) Frame ID, which identifies a specific test configuration;
        (2) Start recording frame on the next toggle operation.
        */
        my_event.gx_event_display_handle = 1;
        my_event.gx_event_type = GX_EVENT_PEN_DRAG;
        my_event.gx_event_payload.gx_event_pointdata.gx_point_x += 80;
        my_event.gx_event_payload.gx_event_pointdata.gx_point_y += 50;
        gx_system_event_send(&my_event);

        gx_validation_set_frame_id(frame_id++);
        sprintf(test_comment, "pen position x=%d, y=%d", my_event.gx_event_payload.gx_event_pointdata.gx_point_x, my_event.gx_event_payload.gx_event_pointdata.gx_point_y );
        gx_validation_set_frame_comment(test_comment);
        gx_validation_screen_refresh();

    }
    
    /* Signal the end of the test case.  Verify the output. */
    gx_validation_end();

    exit(0);
}

